﻿//
const  {app,BrowserWindow,ipcMain,dialog,globalShortcut,Menu,Tray,desktopCapturer} = require('electron')
const path = require("path");
const createTray = require('./tray')
// 页面状态管理
const WinState = require('electron-win-state').default
const MainMenu = require('./MainMenu')
const  contentMenu = Menu.buildFromTemplate([
    {
        label:'1111',
        role:'edit Menu'
    }
])

// const MainMenu=Menu.buildFromTemplate([
//     {label:'首页',
//     submenu:[
//         {label:'111'},
//         {label:'222'},
//         {role:'copy'},
//         {role:'paste'},
//         {role:'redo'},
//         {role:'undo'},
//     ]},
//     {
//         label:'系统动作',
//         submenu:[
//             {
//                 label: '调试工具',
//                 role: 'toggleDevTools'
//             },
//             {
//                 label: '切换全屏/窗口显示',
//                 role: 'togglefullscreen'
//             },
//             {
//                 label: '自定义事件',
//                 click:()=>{
//                     const  arraY = ['yes','no','meby']
//                     dialog.showMessageBox({
//                         title:'对话弹窗',
//                         message:'这是一个对话弹窗',
//                         detail:'请选择你要做的是',
//                         buttons:arraY
//                     }).then(({ response})=>{
//                         console.log(arraY[response])
//                     })
//                 },
//                 accelerator:'Shift+Alt+G'//直接调用动作
//             }
//         ]
//     }
// ])
// 预加载文件
const  createWindow = ()=>{

    const winState = new WinState({
        defaultWidth:800,
        defaultHeight:800,
        // file:'winState.json'
    })
    const win = new BrowserWindow({
        ...winState.winOptions,
        // width:800,
        // height:800,
        frame:true, // 边框
        // titleBarStyle:'custom',
        // title:'electron',
        // titleBarStyle:'hidden', // 隐藏标题栏


        // icon:path.join(__dirname,'icon.png'),
        // titleBarOverlay:{
        //     color:'#fff',
        //     symbolColor:'#000',
        //     height:30
        // },
        // transparent:true, // 透明
        // webPreferences:{
        //     nodeIntegration:true,
        //     contextIsolation:false
        // },

        // icon:path.join(__dirname,'icon.png'),
        // frame:false, // 无边框
        // maximizable:false, // 最大化
        resizable:true, // 可拖动
        show:true, // 页面加载后显示
        backgroundColor:'red',
        // web集配置

        webPreferences:{
            sandbox: false ,// 关闭沙盒模式
            // nodeIntegration:true,
            // contextIsolation:false
            preload:path.join(__dirname,'preload.js') // 预加载文件
        }
    })
    const trayMenu = Menu.buildFromTemplate([
        {
            label:'立即书写',
        },
        {
            label:'立即书写1',
            click:()=>{
                win.isVisible()?win.hide():win.show()
            }
        },

    ])
    // 加载路由作为页面引用
    // win.loadURL('http://gethub.com')
    // win.loadURL('http://jx.1000phone.net/')
    // 加载文件作为页面引用
    win.loadFile('index.html').then(r => {})
    const wc =win.webContents
    // 打开打发者工具
    // wc.openDevTools()
   //  资源加载完毕
   wc.on('did-finish-load',()=>{
       console.log('finish')
   })
    // 立即加载
    wc.on('dom-ready',()=>{
        console.log('dom-read')
    })
    wc.on('context-menu',(e,params)=>{
        console.log('右键触发了',e,params )
        // 注入js语法
        // wc.executeJavaScript(`alert('${params.selectionText}')`)
        // 右键点击打开或关闭弹窗
        // dialog.showMessageBox(win,{
        //     type:'info',
        //     title:'提示',
        //     message:'你选择的内容',
        //     buttons:['确定','取消'],
        //     defaultId:0,
        //     cancelId:1
        // }).then(r=>{
        //     console.log(r)
        // })
        // dialog.showOpenDialog({
        //     title:'选择文件',
        //     buttonLabel:'456', //button 样式文字
        //     // defaultPath:'/Users/gaoyue/Desktop',
        //     defaultPath:app.getPath('desktop'), // 默认路径
        //     // multiSelections 是否选择多个文件
        //     properties:['openFile','openDirectory','multiSelections']
        // }).then(r=>{
        //     console.log(r)
        // })
        // 保存文件
        // dialog.showSaveDialog({
        //
        // }).then(r=>{
        //     console.log(r,'*')
        // })
        const  arraY = ['yes','no','meby']
        // dialog.showMessageBox({
        //     title:'对话弹窗',
        //     message:'这是一个对话弹窗',
        //     detail:'请选择你要做的是',
        //     buttons:arraY
        // }).then(({ response})=>{
        //     console.log(arraY[response])
        // })
       contentMenu.popup()
    })
    win.on('ready-to-show',()=>{
        // win.show()
    })
//     new-window // 是否打开新窗口
//     context-menu 右键上下文信息
//     const  win2   = new BrowserWindow({
//         width:600,
//         height:400,
//         parent:win,
//         mode:true
//     })
//     win2.loadUrl('https://www.baidu.com')
    winState.manage(win)
    // 键盘监听事件 单个A/B/C/D...
    globalShortcut.register('CommandOrControl+Y', ()=>{
        console.log('CommandOrControl+Y')
    })
    Menu.setApplicationMenu (MainMenu('1111',(args)=>{
        console.log(args)
    }))
    createTray(app,win,trayMenu)
    ipcMain.handle('capturer',async (a,args)=>{
      return   desktopCapturer.getSources({types:["window","screen"]}).
        then(
             (source)=>{
            return source

        })
    })

}


// 关闭所有窗口 后的回调 MacOS无法直接退出应用
app.on('window-all-closed',()=>{
   //  判断平台是macos 退出应用
   if (process.platform === 'darwin'){
       app.quit()
   }
})
app.on('before-quit',()=>{
    console.log('退出了')
})
app.on('browser-window-blur',()=>{
    console.log('失去焦点')
    setTimeout(()=>{
        // app.quit()
    },3000)
})
app.on('browser-window-focus',()=>{
    console.log('获取焦点')
})
// 去掉警告 (不要加 看不到警告)
// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
app.whenReady().then(()=>{
    createWindow()
    app.on('active',()=>{
        if (BrowserWindow.getAllWindows().length === 0){
            createWindow()
        }
    })
})
ipcMain.handle('send-event',(event,msg)=>{
    return msg
})
